package md;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/***********************************************************************
 * Module:  SuscripcionMD.java
 * Author:  Pamela
 * Purpose: La clase SuscripcionMD maneja los datos de la tabla suscripción de la BDD
 * version 1.0
 ***********************************************************************/
public class SuscripcionMD {

   private int idSuscripcion;
   private String tipoSuscripcion;
   private int tiempoSuscripcion;
   private double precioSuscripcion;

    /**
     * Constructor vacio.
     * Settea los atributos a los valores por defecto
     */
    public SuscripcionMD() {
        this.idSuscripcion=-1;
        this.tipoSuscripcion="";
        this.tiempoSuscripcion=-1;
        this.precioSuscripcion=-1;

    }

    /**
     * Metodo para ingresar una nueva suscripción.
     *
     * @return Devuelve TRUE si es que se ingresa correctamente el registro en
     * la BDD.
     */
    public boolean ingresarSuscripcionMD() {

        boolean retorno = false;
        String sql = "";
       // System.out.println("entra al ingresar");
       
       if (!this.tipoSuscripcion.equals("")&& this.tiempoSuscripcion != -1  && this.precioSuscripcion != -1 ) {

           sql = "INSERT INTO \"Suscripcion\" " +
                    "(\"idSuscripcion\",\"tipoSuscripcion\", \"tiempoSuscripcion\", \"precioSuscripcion\")" +
                    " VALUES (" + SuscripcionMD.genCodigoSuscripcion() +
                    ",'" + this.tipoSuscripcion +
                    "', " + this.tiempoSuscripcion +
                    ", " + this.precioSuscripcion + ")";

           // System.out.println(sql);
            try {
                Statement stmt = Db.getDb().getConexion().createStatement();
                if (stmt.executeUpdate(sql) > 0) {
                    retorno = true;
                }
                stmt.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }

        return retorno;

    }

    /**
     * Metodo para modificar una suscripción.
     *
     * @return Devuelve TRUE si es que se modifica correctamente el registro en
     * la BDD.
     */
    public boolean modificarSuscripcionMD() {
        boolean retorno = false;
        String sql = "";
        if (this.idSuscripcion != -1 && !this.tipoSuscripcion.equals("")&& this.tiempoSuscripcion != -1  && this.precioSuscripcion != -1 ) {

               sql = "UPDATE \"Suscripcion\" SET" +
                    " \"tipoSuscripcion\"=\'" + this.tipoSuscripcion + "\'" +
                    ", \"tiempoSuscripcion\"=" + this.tiempoSuscripcion +
                    ", \"precioSuscripcion\"=" + this.precioSuscripcion +
                    " WHERE \"idSuscripcion\"=" + this.idSuscripcion;

            //System.out.println(sql);
            try {
                Statement stmt = Db.getDb().getConexion().createStatement();
                if (stmt.executeUpdate(sql) > 0) {
                    retorno = true;
                }
                stmt.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return retorno;
    }

    /**
     * Metodo para eliminar una suscripción.
     *
     * @return Devuelve TRUE si es que se elimina correctamente el registro en
     * la BDD.
     */
    public boolean eliminarSuscripcionMD() {

        boolean retorno = false;
        String sql = "";
        if (this.idSuscripcion != -1 && verificarSuscripcionMD() == true) {
            sql = "DELETE FROM \"Suscripcion\"" +
                    " WHERE \"idSuscripcion\"=" + this.idSuscripcion;
            //System.out.println(sql);
            try {
                Statement stmt = Db.getDb().getConexion().createStatement();
                if (stmt.executeUpdate(sql) > 0) {
                    retorno = true;
                }
                stmt.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return retorno;

    }

    /**
     * Consulta todos los datos de las suscripciones en forma general
     */
    public List consultarSuscripcionMD() {

        List<String[]> retorno = new ArrayList<String[]>();

        String sql = "SELECT \"idSuscripcion\", \"tipoSuscripcion\", \"tiempoSuscripcion\",\"precioSuscripcion\"" +
                " FROM \"Suscripcion\"" +
                " ORDER BY \"idSuscripcion\"";

       // System.out.println(sql);
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {

                String[] arr = {
                    rset.getString("idSuscripcion"),
                    rset.getString("tipoSuscripcion"),
                    rset.getString("tiempoSuscripcion"),
                    rset.getString("precioSuscripcion")
                  };
                retorno.add(arr);
            }
            System.out.println(retorno);
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

        return retorno;

    }
      /**
     * Verifica si la suscripcion existe o no en la BBD.
     *
     * @return Devuelve TRUE si el usuario existe en la BDD.
     */
    public boolean verificarSuscripcionMD() {
        boolean retorno = false;

        String sql = "";
        if (this.idSuscripcion != -1) {
            sql = "Select * FROM \"Suscripcion\"" +
                    " WHERE \"idSuscripcion\"=" + this.idSuscripcion;
           // System.out.println(sql);
            try {
                Statement stmt = Db.getDb().getConexion().createStatement();
                ResultSet rs = stmt.executeQuery(sql);
                while (rs.next()) {
                    retorno = true;
                }
                stmt.close();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return retorno;

    }

     /**
     * Metodo que permite obtener las suscripciones de la BDD.
     *
     * @return Devuelve una lista con los sistemas disponibles de la BDD
     */
    public Map getSuscripciones() {
        System.out.println("Solicita los elementos");
        Map<String, String> retorno = new HashMap<String, String>();
        String sql = "SELECT \"idSuscripcion\", \"tipoSuscripcion\""+
                     "FROM \"Suscripcion\"";
       // System.out.println(sql);
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {
                retorno.put(rset.getString(1), rset.getString(2));
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }

  /**
     * Calcula el idSuscripción que corresponde en la BDD
     *
     * @return Devuelve un entero con el codigo que corresponde en la secuencia
     */
    public static int genCodigoSuscripcion() {
        int retorno = -1;
        String sql = "SELECT MAX(\"idSuscripcion\") + 1 " +
                "FROM \"Suscripcion\"";
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {
                retorno = rset.getInt(1);
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }

     public String[] regresarDatos() {

        String[] retorno = new String[2];
        try {

            String sql = "";

            sql = "Select * FROM \"Suscripcion\"" +
                    " WHERE \"idSuscripcion\"=" + this.idSuscripcion;
            //System.out.println(sql);
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            while (rs.next()) {
                retorno[0] = rs.getString("tiempoSuscripcion");
                retorno[1] = rs.getString("precioSuscripcion");
             }
            stmt.close();
        } catch (SQLException ex) {
            System.out.println("No se ha podido ejecutar la sentencia SQL");
        }

        return retorno;

    }
 /***************************************
     * Getters & Setters
     ***************************************/
    public int getIdSuscripcion() {
        return idSuscripcion;
    }

    public double getPrecioSuscripcion() {
        return precioSuscripcion;
    }

    public int getTiempoSuscripcion() {
        return tiempoSuscripcion;
    }

    public String getTipoSuscripcion() {
        return tipoSuscripcion;
    }

    public void setIdSuscripcion(int idSuscripcion) {
        this.idSuscripcion = idSuscripcion;
    }

    public void setPrecioSuscripcion(double precioSuscripcion) {
        this.precioSuscripcion = precioSuscripcion;
    }

    public void setTiempoSuscripcion(int tiempoSuscripcion) {
        this.tiempoSuscripcion = tiempoSuscripcion;
    }

    public void setTipoSuscripcion(String tipoSuscripcion) {
        this.tipoSuscripcion = tipoSuscripcion;
    }





}
